package com.mlh.binarytree;

/**
 * @author 缪林辉
 * @date 2024/4/1 14:58
 * @DESCRIPTION
 */
// 给定二叉搜索树（BST）的根节点 root 和要插入树中的值 value ，将值插入二叉搜索树。
// 返回插入后二叉搜索树的根节点。 输入数据 保证 ，新值和原始二叉搜索树中的任意节点值都不同。
// 注意，可能存在多种有效的插入方式，只要树在插入后仍保持为二叉搜索树即可。 你可以返回 任意有效的结果 。
public class 二叉搜索树中的插入操作 {
    public TreeNode method1(TreeNode root, int val) {
        if (root==null){
            root=new TreeNode(val);
        }else{
            recursion(root,val);
        }
        return root;
    }

    //去看笔记 二叉排序树的插入即可
    public void recursion(TreeNode node, int val){
        if(node.val>val){
            if(node.left==null){
                TreeNode newNode = new TreeNode(val);
                node.left=newNode;
                return;
            }
            recursion(node.left,val);
        }
        if(node.val<val){
            if(node.right==null){
                TreeNode newNode = new TreeNode(val);
                node.right=newNode;
                return;
            }
            recursion(node.right,val);
        }
    }

    public TreeNode practice(TreeNode root, int val) {
        if(root==null){
            return new TreeNode(val);
        }
        recursionPractice(root,val);
        return root;
    }

    private void recursionPractice(TreeNode root, int val) {
        if(root.val>val){
            if(root.left==null){
                root.left=new TreeNode(val);
            }else{
                recursionPractice(root.left,val);
            }
        }else{
            if(root.right==null){
                root.right=new TreeNode(val);
            }else{
                recursionPractice(root.right,val);
            }
        }
    }
}
